目前我們知道Process在Access memory時會先去找到page,才去找到frame,但其實中間還會經過一個層級,叫做segment,整體的流程會變成這樣
CPU -> segmentation -> paging -> physical
logical address space : segmentation
physical address space : paging
segmentation的觀念與paging非常的相似,不一樣的地方是採用了variable_size去切割記憶體位置,因此每一個segment的大小可以是不一樣的,並且其切割的方法是透過使用者的角度去切割,根據code裡面memory content的內容切成好幾個segment。
但因為大小是不固定的,如果直接mapping到physical address會有很大的external fragmentation,因此作業系統會在segmentation之後去做paging。整個流程如下:
這樣子的好處是memory的使用可以變得非常高,不會有太多的Fragmentation。
同樣會一個segementation table去做mapping到linear address space上面,segmentation table和 page table的概念非常的相似,原先的page number和page offset的概念也相同於segment number + segment offset,但因為沒有大小上的限制,bits的數量是沒有受限的。
segmentation可以指到任何位置、長度也是任意的,Program也是在Segment上面去寫。